---------------------------------------------------------
-- Coordinates paketet. Definerar Coordinate_Type och  --
-- de funktioner och procedurer som krävs för att      --
-- skapa en lista med koordinater.                     --
---------------------------------------------------------
with Rotation_Package;
use Rotation_Package;
package Coordinates is

--   type Coordinate_Type is private;

      ---------------------------------------------------------
   -- Koordinat typen.                                    --
   -- Number används som identifierar för en specifik     --
   -- koordinat.                                          --
   -- Coordinates är av typen Int_Vector som är en integer--
   -- array av storleken 1..3, där plats 1, 2, 3          --
   -- representerar x, y, z för koordinaten.              --
   ---------------------------------------------------------
   type Coordinate_Type is
      record
         Number : Integer;
         Coordinates : Int_Vector;
      end record;

   --type Int_Vector is array (1..3) of Integer;

   ---------------------------------------------------------
   -- Get_Key används för att kunna få ut ett sökvärde    --
   -- för listhantering,                                  --
   -- Inparameter: Coordinate_Type                        --
   -- Returvärde: Integer som används för att identifiera --
   -- en specifik koordinat.                              --
   ---------------------------------------------------------
   function Get_Key(Coord : in Coordinate_type) return Integer;

   ---------------------------------------------------------
   -- Jämförelseoperatorer som krävs för att insättningen --
   -- i den sorterade listan skall fungera.               --
   ---------------------------------------------------------
   function "<"(Left,Right : in Coordinate_Type) return Boolean;
   function ">"(Left,Right : in Coordinate_Type) return Boolean;
   function "="(Left,Right : in Coordinate_Type) return Boolean;

   ---------------------------------------------------------
   -- Set_coordinates är en procedure som används för att --
   -- sätta rätt x, y, z, värden i en coordinate_type.    --
   ---------------------------------------------------------
   procedure Set_Coordinates(Coord : in out Coordinate_Type;
                             X : in Integer;
                             Y : in Integer;
                             Z : in Integer);

   ---------------------------------------------------------
   -- Set_Number sätter ett nummer på en coordinate_type  --
   -- numret fungerar som identifiera.                    --
   ---------------------------------------------------------
   procedure Set_Number(Coord : in out Coordinate_Type;
                        Number: in Integer);

   ---------------------------------------------------------
   -- Tar in en Coordinate_type och returnerar en integer --
   -- array (Int_Vector) som motsvarar Coordinate_Types   --
   -- x,y,z.                                              --
   ---------------------------------------------------------
   function Get_Coordinates(Coord : in Coordinate_Type) return Int_Vector;

   ---------------------------------------------------------
   -- Put procedure för att skriva ut info om en          --
   -- koordinat. Krävs för att listpaketet skall fungera  --
   -- samt är bra att ha för testning och debugging.      --
   ---------------------------------------------------------
   procedure Put(Item : in Coordinate_Type);

private

end Coordinates;

